package com.unitd.modules.gen.service.impl;

import com.unitd.frame.comm.utils.DateUtils;
import com.unitd.frame.comm.utils.StringUtils;
import com.unitd.frame.mybatis.core.dao.ICrudDao;
import com.unitd.frame.mybatis.core.service.impl.CrudServiceImpl;
import com.unitd.modules.gen.dao.IGenTemplateDao;
import com.unitd.modules.gen.entity.GenTemplate;
import com.unitd.modules.gen.service.IGenTemplateService;
import org.apache.commons.lang3.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * @desc 代码模板Service
 * @filename GenTableService.java
 * @copyright www.unitdtech.com
 * @author Hudan
 * @version 1.0
 * @date 2017-04-27
 */
@Service("genTemplateService")
public class GenTemplateServiceImpl extends CrudServiceImpl<GenTemplate, String> implements IGenTemplateService {

	@Autowired
	private IGenTemplateDao genTemplateDao;

	/**
	 * @desc 定义成抽象方法, 由子类实现, 完成dao的注入
	 * @return GenericDao实现类
	 */
	@Override
	public ICrudDao<GenTemplate, String> getDao() {
		return genTemplateDao;
	}

	/**
	 * @desc 获取单条数据
	 * @param id 主键ID
	 * @return
	 */
	@Override
	public GenTemplate findBy(String id) {
		return genTemplateDao.findBy(id);
	}

	/**
	 * @desc 查询数据列表，如果需要分页，请设置分页对象，如：entity.setPage(new Page<T>());
	 * @param entity 查询参数对象
	 * @return List<Model>
	 */
	@Override
	public List<GenTemplate> findListBy(GenTemplate entity) {
		return genTemplateDao.findListBy(entity);
	}

	/**
	 * @desc 查询所有数据列表
	 * @param entity 查询参数对象
	 * @return List<Model>
	 */
	@Override
	public List<GenTemplate> findAllData(GenTemplate entity) {
		return genTemplateDao.findAllData(entity);
	}

	/**
	 * @desc 保存/更新生成方案信息持久化对象
	 * @param genTemplate 生成方案表信息
	 * @param userId 操作人
	 * @return
	 */
	@Override
	@Transactional(rollbackFor={RuntimeException.class, Exception.class, Throwable.class})
	public void doEdit(GenTemplate genTemplate, String userId) {
		if (genTemplate.getContent() != null) {
			genTemplate.setContent(StringEscapeUtils.unescapeHtml4(genTemplate.getContent()));
		}

		if(StringUtils.isZero(genTemplate.getId())) {
//			genTemplate.preInsert();
			genTemplate.setCreateBy(userId);
			genTemplate.setCreateDate(DateUtils.formatDate(new Date(), DateUtils.TIMESTAMP_PATTERN));
			genTemplate.preInsert();
			genTemplateDao.insertSelective(genTemplate);
		} else {
			genTemplate.setUpdateBy(userId);
			genTemplate.setUpdateDate(DateUtils.formatDate(new Date(), DateUtils.TIMESTAMP_PATTERN));
			genTemplate.preUpdate();
			genTemplateDao.updateByPrimaryKeySelective(genTemplate);
		}
	}

	/**
	 * @desc 根据参数信息,逻辑删除生成方案表对象信息
	 * @param genTemplate 生成方案表信息
	 */
	@Override
	@Transactional(rollbackFor={RuntimeException.class, Exception.class, Throwable.class})
	public int deleteByDelFlag(GenTemplate genTemplate) {
		return genTemplateDao.deleteByDelFlag(genTemplate);
	}
}